--- /dev/null
+# Debugging
+
+## Looking Glass
+
+[Looking Glass][lg] is a built-in debugger and inspector tool that makes
+it possible to run arbitrary JS code inside the shell, visually select
+any object from the shell's scene, and much more.
+
+It can be accessed by entering `lg` into the run dialog (Alt+F2).
+
+[lg]: looking-glass.md
+
+## Javascript stacktraces
+
+gnome-shell is split between C and JavaScript. It is sometimes necessary
+to debug the interaction between the two, for example when javascript
+code triggers a warning or crash on the C side.
+
+In gdb, the javascript stacktrace can be printed with
+```
+<gdb> gjs_dumpstack()
+```
+
+The `SHELL_DEBUG` environment variable can be used to print
+the javascript stack automatically:
+
+ * `backtrace-warning`: when a warning is logged
+ * `backtrace-segfault`: on segfaults
+
+To log a stacktrace when some particular javascript code is reached, you
+can insert the following code:
+
+```js
+console.trace('trace from doSomething()')
+```
+
+## Debugging the session's gnome-shell proces
+
+It is possible to attach gdb to the gnome-shell process of the existing
+login session (or with the native backend on a tty), but beware: When the
+debugger stops the gnome-shell process, the entire session will freeze.
+
+It is necessary to use a second system to continue controlling the
+debugger, most conveniently in combination with [screen]:
+
+ 1. create a screen session
+ 2. detach the session
+ 3. ssh from a second system
+ 4. resume the screen session
+ 5. attach gdb to the gnome-shell process
+
+[screen]: https://www.gnu.org/software/screen/